import sys
import os
from PyQt5.QtWidgets import (QMainWindow, QLineEdit, QPushButton,
                             QLabel,
                             QAction, QFileDialog, QApplication)
from PyQt5.QtGui import QIcon
from PyQt5 import QtGui, QtCore
from PyQt5.QtCore import QThread, pyqtSignal

global url

def toVideo(url, outUrl):
        compress = "ffmpeg -i {} {} -q:v 1".format(url, outUrl)
        print(compress)
        isRun = os.system(compress)
        if isRun != 0:
            return (isRun,"没有安装ffmpeg")

class FileDialog(QMainWindow): # 基于 QMainWindow 组件，因为我们中心需要设置一个文本编辑框组件。
    def __init__(self):
        super().__init__()
 
        self.initUI()
        self.mythread = MyThread() # 实例化自己建立的任务线程类
        self.mythread.signal.connect(self.callback) #设置任务线程发射信号触发的函数
    

    def callback(self,i): # 这里的 i 就是任务线程传回的数据
       self.mythread.start(1)

    def initUI(self):
        # 文本框
        self.textbox = QLineEdit(self)
        self.textbox.move(80, 35)
        self.textbox.resize(280, 35)
        self.textbox.setFocusPolicy(QtCore.Qt.NoFocus)
        # label
        self.label = QLabel(self)
        self.label.move(20, 35)
        self.label.resize(60, 35)
        self.label.setText('文件路径：')


        #按钮
        self.button = QPushButton('转换', self)
        self.button.move(20, 80)
        self.button.clicked.connect(self.callback) 

        self.statusBar()
        self.setWindowIcon(QIcon('./lib/favicon.ico'))
 
        openFile = QAction(QIcon('./lib/favicon.ico'), '选择文件', self)
        openFile.setShortcut('Ctrl+O')
        openFile.setStatusTip('选择需要转换的视频')
        openFile.triggered.connect(self.showDialog)
 
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&文件')
        fileMenu.addAction(openFile)

        self.setGeometry(300, 300, 650, 400)
        self.setWindowTitle('视频处理工具')
        self.show()
        
 
    def showDialog(self):
        # 弹出文件选择框。第一个字符串参数是getOpenFileName()方法的标题。第二个字符串参数指定了对话框的工作目录。
        # 默认的，文件过滤器设置成All files (*)。
        fname = QFileDialog.getOpenFileName(self, 'Open file', '/')
 
        # 选中文件后，读出文件的内容，并设置成文本编辑框组件的显示文本
        print(fname[0])
        global url
        url = fname[0]
        self.textbox.setText(fname[0])
        
    

class MyThread(QThread):
    signal = pyqtSignal(str) #设置触发信号传递的参数数据类型,这里是字符串
    def __init__(self):
        super(MyThread, self).__init__()

    def run(self): # 在启动线程后任务从这个函数里面开始执行
        global url
        print(url)
        toVideo(url, '1.mp4')
        print('ok')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = FileDialog()
    sys.exit(app.exec_())
